home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / amos / amcafext.lha / AMCAF_Examples / BankManager.AMOS / BankManager.amosSourceCode
AMOS Source Code  |  1995-07-14  |  59KB  |  2,277 lines

  1. ' *************************************
  2. ' *                                   *
  3. ' *      AMCAF Bank Manager V1.1      *
  4. ' *      Written by Chris Hodges      *
  5. ' *                                   *
  6. ' *************************************
  7. '
  8. Set Buffer 40
  9. MXFILES=300
  10. Dim FIL$(MXFILES)
  11. '
  12. Dim FB(71,4),FB$(71)
  13. Global FB(),FB$()
  14. TH=8
  15. Global TH
  16. Erase All 
  17. MAIN
  18. End 
  19. Procedure MAIN
  20.   Dim BNK$(100)
  21.   Gosub INIT
  22.   Gosub UPDATBANKS
  23.   MOBNK=0
  24.   OMK=0
  25.   Do 
  26.     Repeat : Multi Wait : Until Amos Here
  27.     If Timer>25
  28.       A$="}Chip: "+ Extension_8_0EB8(Chip Free/1024,4)+" KB  Fast: "+ Extension_8_0EB8(Fast Free/1024,5)+"KB "
  29.       TEX[300,0,614,10,A$]
  30.       Timer=0
  31.     End If 
  32.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  33.     BT=0
  34.     If MK=1 and OMK<>1
  35.       CHKMOUSE[XM,YM,20,64]
  36.       BT=Param
  37.     End If 
  38.     If BT=23 Then Gosub LOAALLBANKS
  39.     If BT=24 Then Gosub SAVALLBANKS
  40.     If BT=25 Then Gosub CLRALLBANKS
  41.     If BT=27 Then Gosub LOAFILE
  42.     If BT=28 Then Gosub SAVFILE
  43.     If BT=29 or BT=58 Then Gosub CLRBANK
  44.     If BT=30 Then Gosub KILFILE
  45.     If BT=31 Then Gosub PPPACK
  46.     If BT=32 Then Gosub FIMPPACK
  47.     If BT=33 Then Gosub BANKDELTAENCOD
  48.     If BT=34 Then Gosub BANKDELTADECOD
  49.     If BT=35 Then Gosub RENAMBANK
  50.     If BT=36 Then Gosub BANKLENGTH
  51.     If BT=37 or BT=55 Then Gosub CHANGEMEMTYPE
  52.     If BT=38 or BT=56 Then Gosub CHANGEBANKTYPE
  53.     If BT=39 Then Gosub ENCODEADD
  54.     If BT=40 Then Gosub ENCODEXOR
  55.     If BT=41 Then Gosub ENCODEMIX
  56.     If BT=42 Then Gosub ENCODEROL
  57.     If BT=43 Then Gosub UNCODEADD
  58.     If BT=44 Then Gosub UNCODEXOR
  59.     If BT=45 Then Gosub UNCODEMIX
  60.     If BT=46 Then Gosub UNCODEROL
  61.     If BT>38 and BT<47 Then Gosub UPDATONLY
  62.     If BT=47 Then Gosub ARROWUP
  63.     If BT=48 Then Gosub ARROWDOWN
  64.     If BT=49 Then Gosub DRAGSLIDER
  65.     If BT=50 Then Gosub FLIPPAGE
  66.     If BT=57 Then Gosub SWPBANK
  67.     If BT=59 Then Gosub DUPLICATE
  68.     If BT=60 Then Gosub UNPCK
  69.     If BT=61 Then Gosub VIWASCII
  70.     If BT=62 Then Gosub VIWHEX
  71.     If BT=63 Then Gosub CUSTOM
  72.     If BT=64 Then Gosub SELECT
  73.     If BT=20 or BT=26
  74.       If MOBNK=1
  75.         REQUEST["Banks not saved, do you want to save before leaving?","Save|Abandon|Cancel"]
  76.         If Param=0
  77.           Gosub SAVALLBANKS
  78.         End If 
  79.         If Param=1
  80.           REQUEST["Do you really want to quit this program?","Quit|Cancel"]
  81.           Exit If Param=0
  82.         End If 
  83.       Else 
  84.         REQUEST["Do you really want to quit this program?","Quit|Cancel"]
  85.         Exit If Param=0
  86.       End If 
  87.     End If 
  88.     If BT=22 Then Amos To Back 
  89.     OMK=MK
  90.   Loop 
  91.   Screen Close 0
  92.   Erase All 
  93. Pop Proc
  94. ENCODEADD:
  95.   REQUEST["Shall I encode bytewise or wordwise?","Byte|Word"]
  96.   If Param
  97.     NUMENT["Enter a number from 1 to 65535. Don't forget this number!","Encode|Cancel",Rnd(65535),0,65535]
  98.     If Left$(Param$,1)="1" : Return : End If 
  99.      Extension_8_01AC Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  100.     MOBNK=1
  101.   Else 
  102.     NUMENT["Enter a number from 1 to 255. Don't forget this number!","Encode|Cancel",Rnd(255),0,255]
  103.     If Left$(Param$,1)="1" : Return : End If 
  104.      Extension_8_00EE Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  105.     MOBNK=1
  106.   End If 
  107. Return 
  108. ENCODEXOR:
  109.   REQUEST["Shall I encode bytewise or wordwise?","Byte|Word"]
  110.   If Param
  111.     NUMENT["Enter a number from 1 to 65535. Don't forget this number!","Encode|Cancel",Rnd(65535),0,65535]
  112.     If Left$(Param$,1)="1" : Return : End If 
  113.      Extension_8_0186 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  114.     MOBNK=1
  115.   Else 
  116.     NUMENT["Enter a number from 1 to 255. Don't forget this number!","Encode|Cancel",Rnd(255),0,255]
  117.     If Left$(Param$,1)="1" : Return : End If 
  118.      Extension_8_00C8 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  119.     MOBNK=1
  120.   End If 
  121. Return 
  122. ENCODEMIX:
  123.   REQUEST["Shall I encode bytewise or wordwise?","Byte|Word"]
  124.   If Param
  125.     NUMENT["Enter a number from 1 to 65535. Don't forget this number!","Encode|Cancel",Rnd(65535),0,65535]
  126.     If Left$(Param$,1)="1" : Return : End If 
  127.      Extension_8_01D2 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  128.     MOBNK=1
  129.   Else 
  130.     NUMENT["Enter a number from 1 to 255. Don't forget this number!","Encode|Cancel",Rnd(255),0,255]
  131.     If Left$(Param$,1)="1" : Return : End If 
  132.      Extension_8_0114 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  133.     MOBNK=1
  134.   End If 
  135. Return 
  136. ENCODEROL:
  137.   REQUEST["Shall I encode bytewise or wordwise?","Byte|Word"]
  138.   If Param
  139.     NUMENT["Enter a number from 1 to 15. Don't forget this number!","Encode|Cancel",Rnd(15),0,15]
  140.     If Left$(Param$,1)="1" : Return : End If 
  141.      Extension_8_01F8 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  142.     MOBNK=1
  143.   Else 
  144.     NUMENT["Enter a number from 1 to 7. Don't forget this number!","Encode|Cancel",Rnd(7),0,7]
  145.     If Left$(Param$,1)="1" : Return : End If 
  146.      Extension_8_013A Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  147.     MOBNK=1
  148.   End If 
  149. Return 
  150. UNCODEADD:
  151.   REQUEST["Shall I decode bytewise or wordwise?","Byte|Word"]
  152.   If Param
  153.     NUMENT["Enter the code from 1 to 65535.","Encode|Cancel",0,0,65535]
  154.     If Left$(Param$,1)="1" : Return : End If 
  155.      Extension_8_01AC -Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  156.     MOBNK=1
  157.   Else 
  158.     NUMENT["Enter the code from 1 to 255.","Encode|Cancel",0,0,255]
  159.     If Left$(Param$,1)="1" : Return : End If 
  160.      Extension_8_00EE -Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  161.     MOBNK=1
  162.   End If 
  163. Return 
  164. UNCODEXOR:
  165.   REQUEST["Shall I decode bytewise or wordwise?","Byte|Word"]
  166.   If Param
  167.     NUMENT["Enter the code from 1 to 65535.","Encode|Cancel",0,0,65535]
  168.     If Left$(Param$,1)="1" : Return : End If 
  169.      Extension_8_0186 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  170.     MOBNK=1
  171.   Else 
  172.     NUMENT["Enter the code from 1 to 255.","Encode|Cancel",0,0,255]
  173.     If Left$(Param$,1)="1" : Return : End If 
  174.      Extension_8_00C8 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  175.     MOBNK=1
  176.   End If 
  177. Return 
  178. UNCODEMIX:
  179.   REQUEST["Shall I decode bytewise or wordwise?","Byte|Word"]
  180.   If Param
  181.     NUMENT["Enter the code from 1 to 65535.","Encode|Cancel",0,0,65535]
  182.     If Left$(Param$,1)="1" : Return : End If 
  183.      Extension_8_01D2 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  184.     MOBNK=1
  185.   Else 
  186.     NUMENT["Enter the code from 1 to 255.","Encode|Cancel",0,0,255]
  187.     If Left$(Param$,1)="1" : Return : End If 
  188.      Extension_8_0114 -Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  189.     MOBNK=1
  190.   End If 
  191. Return 
  192. UNCODEROL:
  193.   REQUEST["Shall I decode bytewise or wordwise?","Byte|Word"]
  194.   If Param
  195.     NUMENT["Enter the code from 1 to 15.","Encode|Cancel",0,0,15]
  196.     If Left$(Param$,1)="1" : Return : End If 
  197.      Extension_8_021E Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  198.     MOBNK=1
  199.   Else 
  200.     NUMENT["Enter the code from 1 to 7.","Encode|Cancel",0,0,7]
  201.     If Left$(Param$,1)="1" : Return : End If 
  202.      Extension_8_0160 Val(Mid$(Param$,2)), Extension_8_098C(BNK$(SEL))
  203.     MOBNK=1
  204.   End If 
  205. Return 
  206. CUSTOM:
  207.   BANK= Extension_8_098C(BNK$(SEL))
  208.   ST=Start(BANK) : LE=Length(BANK)
  209.   ID=Leek(ST) : BN$= Extension_8_027A(BANK)
  210.   If Leek(ST+8)= Extension_8_0998("ILBM")
  211.      Extension_8_0472 "T:Temp",BANK
  212.     Load Iff "T:Temp",1
  213.     Kill "T:Temp"
  214.     While Mouse Key=0 : Multi Wait : Wend 
  215.     Screen Close 1
  216.   End If 
  217.   If ID=$12031990
  218.     Unpack BANK To 1
  219.     While Mouse Key=0 : Multi Wait : Wend 
  220.     Screen Close 1
  221.   End If 
  222.   If BN$="Music   "
  223.     If ST>$200000
  224.       REQUEST["Music not in chip mem. Move there?","Yes|No"]
  225.       If Param=0
  226.          Extension_8_00A0 BANK
  227.         Gosub UPDATONLY
  228.         Music 1
  229.         REQUEST["Playing AMOS music...","Stop!"]
  230.         Music Off 
  231.       End If 
  232.     Else 
  233.       Music 1
  234.       REQUEST["Playing AMOS music...","Stop!"]
  235.       Music Off 
  236.     End If 
  237.   End If 
  238.   If Leek(ST+1080)= Extension_8_0998("M.K.")
  239.     If ST>$200000
  240.       REQUEST["Music not in chip mem. Move there?","Yes|No"]
  241.       If Param=0
  242.          Extension_8_00A0 BANK
  243.         Gosub UPDATONLY
  244.          Extension_8_10F2 125
  245.          Extension_8_108E BANK
  246.         REQUEST["Playing Protracker music...","Stop!"]
  247.          Extension_8_10A8 
  248.       End If 
  249.     Else 
  250.        Extension_8_10F2 125
  251.        Extension_8_108E BANK
  252.       REQUEST["Playing Protracker music...","Stop!"]
  253.        Extension_8_10A8 
  254.     End If 
  255.   End If 
  256. Return 
  257. SETUPSCREEN:
  258.   Screen Open 1,640,256,4,$8000
  259.   Curs Off : Flash Off : Paper 2 : Pen 0 : Cls 0
  260.   Palette 0,$FFF,$AAA,$666
  261.   Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  262.   Screen Display 1,128,40,320,256
  263.   Gr Writing 0
  264.   Multi Wait : Limit Mouse 
  265.   DEFCLOWIN[65,0,0]
  266.   FILBOX[0,11,639,255,0]
  267.   DEFSCRTBK[67,617,0]
  268. Return 
  269. VIWASCII:
  270.   Gosub SETUPSCREEN
  271.   DEFTEX[66,19,0,616,10,"{View bank as ascii",1]
  272.   BANK= Extension_8_098C(BNK$(SEL))
  273.   ST=Start(BANK) : LE=Length(BANK)
  274.   POSX=0 : POSY=0
  275.   Do 
  276.     P=Peek(ST) : Inc ST : Dec LE
  277.     If P<32 Then I$="." Else I$=Chr$(P)
  278.     If P=10 Then POSX=0 : Inc POSY : I$=""
  279.     If P=13 Then POSX=0 : I$=""
  280.     If I$<>""
  281.       Locate POSX+1,POSY+2 : Print I$;
  282.       Inc POSX
  283.     End If 
  284.     If POSX>77
  285.       POSX=0 : Inc POSY
  286.     End If 
  287.     Exit If POSY>28 or LE=0
  288.   Loop 
  289.   Do 
  290.     Repeat : Multi Wait : Until Amos Here
  291.     If Timer>25
  292.       A$="}Chip: "+ Extension_8_0EB8(Chip Free/1024,4)+" KB  Fast: "+ Extension_8_0EB8(Fast Free/1024,5)+"KB "
  293.       TEX[300,0,614,10,A$]
  294.       Timer=0
  295.     End If 
  296.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  297.     Exit If BT=65
  298.     BT=0
  299.     If MK=1 and OMK<>1
  300.       CHKMOUSE[XM,YM,65,67]
  301.       BT=Param
  302.     End If 
  303.     If BT=67 Then Amos To Back 
  304.     OMK=MK
  305.   Loop 
  306.   Screen Close 1
  307. Return 
  308. VIWHEX:
  309.   Gosub SETUPSCREEN
  310.   DEFTEX[66,19,0,616,10,"{View bank as hex",1]
  311.   DRABOX[4,13,615,253,3]
  312.   DEFARROWU[68,618,253-17]
  313.   DEFARROWD[69,618,253-8]
  314.   DEFBOX[71,618,13,635,253-18,3]
  315.   BANK= Extension_8_098C(BNK$(SEL))
  316.   ST=Start(BANK) : LE=Length(BANK)
  317.   MXLIN=(LE+19)/20
  318.   OFF=0
  319.   DRASLIDER[71,OFF,29,MXLIN,70]
  320.   OLDHEX=-99
  321.   Gosub UPDATHEX
  322.   Do 
  323.     Repeat : Multi Wait : Until Amos Here
  324.     If Timer>25
  325.       A$="}Chip: "+ Extension_8_0EB8(Chip Free/1024,4)+" KB  Fast: "+ Extension_8_0EB8(Fast Free/1024,5)+"KB "
  326.       TEX[300,0,614,10,A$]
  327.       Timer=0
  328.     End If 
  329.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  330.     Exit If BT=65
  331.     BT=0
  332.     If MK=1 and OMK<>1
  333.       CHKMOUSE[XM,YM,65,71]
  334.       BT=Param
  335.     End If 
  336.     If BT=67 Then Amos To Back 
  337.     If BT=68 Then Gosub HEXUP
  338.     If BT=69 Then Gosub HEXDOWN
  339.     If BT=70 Then Gosub HEXSLIDER
  340.     If BT=71 Then Gosub HEXFLIPPAGE
  341.     OMK=MK
  342.   Loop 
  343.   Screen Close 1
  344. Return 
  345. UPDATHEX:
  346.   D=OFF-OLDHEX
  347.   If D=0 Then Return 
  348.   If FB(70,4) and 1 Then DRASLIDER[71,OFF,29,MXLIN,70]
  349.   If Abs(D)>15
  350.     For A=0 To Min(28,MXLIN-1)
  351.       Gosub LISTHEX
  352.     Next 
  353.     OLDHEX=OFF
  354.     Return 
  355.   End If 
  356.   If D>0
  357.     Screen Copy 1,6,16+D*8,613,248 To 1,6,16
  358.      Extension_8_1258 
  359.     For A=29-D To 28
  360.       Gosub LISTHEX
  361.     Next 
  362.   Else 
  363.     Screen Copy 1,6,16,613,248+D*8 To 1,6,16-D*8
  364.      Extension_8_1258 
  365.     For A=0 To -D-1
  366.       Gosub LISTHEX
  367.     Next 
  368.   End If 
  369.   OLDHEX=OFF
  370. Return 
  371. LISTHEX:
  372.   OA=(OFF+A)*20
  373.   A$=Hex$(OA,6)+":"
  374.   For AA=0 To 4
  375.     Exit If OA+AA*4=>LE
  376.     P=Leek(ST+OA+AA*4)
  377.   A$=A$+" "+Hex$(P,8)
  378.   Next 
  379.   B$=""
  380.   For AA=0 To 19
  381.     Exit If OA+AA=>LE
  382.     P=Peek(ST+OA+AA)
  383.     If P>31 Then B$=B$+Chr$(P) Else B$=B$+"."
  384.   Next 
  385.   A$=A$-"$"
  386.   Locate 1,2+A : Print A$;Space$(54-Len(A$));B$;Space$(20-Len(B$));
  387. Return 
  388. HEXUP:
  389.   PUSHGAD[BT]
  390.   Repeat 
  391.     Multi Wait 
  392.     MK=Mouse Key : I$=Inkey$
  393.     If OFF>0
  394.       Dec OFF
  395.       Gosub UPDATHEX
  396.     End If 
  397.   Until MK<>1
  398.   RELEGAD[BT]
  399. Return 
  400. HEXDOWN:
  401.   PUSHGAD[BT]
  402.   Repeat 
  403.     Multi Wait 
  404.     MK=Mouse Key : I$=Inkey$
  405.     If OFF<MXLIN-29
  406.       Inc OFF
  407.       Gosub UPDATHEX
  408.     End If 
  409.   Until MK<>1
  410.   RELEGAD[BT]
  411. Return 
  412. HEXSLIDER:
  413.   DISGAD[70]
  414.   O=YM-FB(70,1)
  415.   Repeat 
  416.     Multi Wait 
  417.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  418.     DRAGSLIDER[71,YM-O,29,MXLIN,70]
  419.     If MXLIN>29
  420.       OFF=Param
  421.       Gosub UPDATHEX
  422.     End If 
  423.   Until MK<>1
  424.   ENAGAD[70]
  425.   DRASLIDER[71,OFF,29,MXLIN,70]
  426.   OMK=1
  427. Return 
  428. HEXFLIPPAGE:
  429.   If MXLIN<29 Then Return 
  430.   If YM>(FB(70,1)+FB(70,3))/2
  431.     OFF=Min(OFF+29,MXLIN-29)
  432.   Else 
  433.     OFF=Max(OFF-29,0)
  434.   End If 
  435.   Gosub UPDATHEX
  436. Return 
  437. UNPCK:
  438.   BANK= Extension_8_098C(BNK$(SEL))
  439.   ID=Leek(ST)
  440.   If ID= Extension_8_0998("PP20")
  441.      Extension_8_04D2 BANK To 1000
  442.     Bank Swap BANK,1000
  443.     Erase 1000
  444.     Gosub UPDATONLY
  445.     MOBNK=1
  446.     Return 
  447.   End If 
  448.   If ID= Extension_8_0998("IMP!")
  449.      Extension_8_0E8A BANK To 1000
  450.     Bank Swap BANK,1000
  451.     Erase 1000
  452.     Gosub UPDATONLY
  453.     MOBNK=1
  454.     Return 
  455.   End If 
  456.   If ID= Extension_8_0998("RNC"+Chr$(1))
  457.      Extension_8_03FC BANK To 1000
  458.     Bank Swap BANK,1000
  459.     Erase 1000
  460.     Gosub UPDATONLY
  461.     MOBNK=1
  462.     Return 
  463.   End If 
  464.   REQUEST["Bank not compressed or format unknown.","Ok"]
  465. Return 
  466. SWPBANK:
  467.   BANK= Extension_8_098C(BNK$(SEL))
  468.   NUMENT["Enter the bank to be swapped:","Ok|Cancel",BANK,0,999]
  469.   A$=Param$
  470.   If Left$(A$,1)="1" Then Return 
  471.   A=Val(Mid$(Param$,2))
  472.   Bank Swap Max(A,1),BANK
  473.   Gosub UPDATBANKS
  474.   MOBNK=1
  475. Return 
  476. DUPLICATE:
  477.   BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  478.   NUMENT["Enter the target bank number:","Ok|Cancel",BANK,0,999]
  479.   BANK= Extension_8_098C(BNK$(SEL))
  480.   A$=Param$
  481.   If Left$(A$,1)="1" Then Return 
  482.   A=Max(Val(Mid$(A$,2)),1)
  483.   If A=BANK Then Return 
  484.    Extension_8_025A BANK To A
  485.   Gosub UPDATBANKS
  486.   MOBNK=1
  487. Return 
  488. RENAMBANK:
  489.   BANK= Extension_8_098C(BNK$(SEL))
  490.   A$= Extension_8_027A(BANK)
  491.   While Right$(A$,1)=" " : A$=Left$(A$,Len(A$)-1) : Wend 
  492.   TXTENT["Enter the new name:","Ok|Cancel",A$,8]
  493.   A$=Param$
  494.   If Left$(A$,1)="1" Then Return 
  495.    Extension_8_028C BANK,Mid$(A$,2)
  496.   Gosub UPDATONLY
  497.   MOBNK=1
  498. Return 
  499. BANKLENGTH:
  500.   REQUEST["Are you sure, that you want to change the size of the bank?","Proceed|Cancel"]
  501.   If Param=1 Then Return 
  502.   BANK= Extension_8_098C(BNK$(SEL)) : OL=Length(BANK)
  503.   NUMENT["Enter the new size:","Ok|Cancel",OL,0,512000]
  504.   A$=Param$
  505.   If Left$(A$,1)="1" Then Return 
  506.   NL=Val(Mid$(Param$,2))
  507.   If NL<OL
  508.     REQUEST["You will loose"+Str$(OL-NL)+" with this operation!","Proceed|Cancel"]
  509.     If Param=1 : Return : End If 
  510.   End If 
  511.   If NL>0
  512.      Extension_8_0244 BANK To NL
  513.   Else 
  514.     Erase NL
  515.   End If 
  516.   Gosub UPDATONLY
  517.   MOBNK=1
  518. Return 
  519. CHANGEMEMTYPE:
  520.   A= Extension_8_098C(BNK$(SEL))
  521.   D=Deek(Start(A)-12)
  522.   If D and 2
  523.     NEWTEX[55,"@ Fast"]
  524.      Extension_8_00B4 A
  525. '    Doke Start(A)-12,D and $FFFD
  526.   Else 
  527.     NEWTEX[55,"@ Chip"]
  528.      Extension_8_00A0 A
  529. '    Doke Start(A)-12,(D and $FFFD)+2
  530.   End If 
  531.   Gosub UPDATONLY
  532.   MOBNK=1
  533. Return 
  534. CHANGEBANKTYPE:
  535.   A= Extension_8_098C(BNK$(SEL))
  536.   If Deek(Start(A)-12) and 1
  537.     NEWTEX[56,"@ Temp"]
  538.      Extension_8_008A A
  539.   Else 
  540.     NEWTEX[56,"@ Perm"]
  541.      Extension_8_0074 A
  542.   End If 
  543.   Gosub UPDATONLY
  544.   MOBNK=1
  545. Return 
  546. ARROWUP:
  547.   PUSHGAD[BT]
  548.   Repeat 
  549.     Multi Wait 
  550.     MK=Mouse Key : I$=Inkey$
  551.     If OFFSET>0
  552.       Dec OFFSET
  553.       Gosub UPDATLIST
  554.     End If 
  555.   Until MK<>1
  556.   RELEGAD[BT]
  557. Return 
  558. ARROWDOWN:
  559.   PUSHGAD[BT]
  560.   Repeat 
  561.     Multi Wait 
  562.     MK=Mouse Key : I$=Inkey$
  563.     If OFFSET<NUMBANKS-18
  564.       Inc OFFSET
  565.       Gosub UPDATLIST
  566.     End If 
  567.   Until MK<>1
  568.   RELEGAD[BT]
  569. Return 
  570. DRAGSLIDER:
  571.   DISGAD[49]
  572.   O=YM-FB(49,1)
  573.   Repeat 
  574.     Multi Wait 
  575.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  576.     DRAGSLIDER[50,YM-O,18,NUMBANKS,49]
  577.     If NUMBANKS>18
  578.       OFFSET=Param
  579.       Gosub UPDATLIST
  580.     End If 
  581.   Until MK<>1
  582.   ENAGAD[49]
  583.   DRASLIDER[50,OFFSET,18,NUMBANKS,49]
  584.   OMK=1
  585. Return 
  586. FLIPPAGE:
  587.   If NUMBANKS<18 Then Return 
  588.   If YM>(FB(49,1)+FB(49,3))/2
  589.     OFFSET=Min(OFFSET+18,NUMBANKS-18)
  590.   Else 
  591.     OFFSET=Max(OFFSET-18,0)
  592.   End If 
  593.   Gosub UPDATLIST
  594. Return 
  595. SELECT:
  596.   Y=YM-68
  597.   If Y<0 or Y>143 Then Return 
  598.   A=Y/8+OFFSET
  599.   If A=>NUMBANKS Then Return 
  600.   If Y/8=SEL Then Return 
  601.   If SEL=-1
  602.     ACTGAD[28]
  603.     ACTGAD[29]
  604.     For A=31 To 46
  605.       ACTGAD[A]
  606.     Next 
  607.     For A=55 To 63
  608.       ACTGAD[A]
  609.     Next 
  610.   End If 
  611.   If SEL-OFFSET=>0 and SEL-OFFSET<18
  612.     A=SEL-OFFSET : SEL=-1
  613.     Gosub LISBANK
  614.   End If 
  615.   SEL=Y/8+OFFSET
  616.   A=SEL-OFFSET : Gosub LISBANK
  617.   Gosub UPDATSTATE
  618. Return 
  619. UPDATSTATE:
  620.   B$=BNK$(SEL) : A= Extension_8_098C(B$)
  621.   NEWTEX[51,"{"+ Extension_8_0EB8(A,3)]
  622.   NEWTEX[52,"{"+ Extension_8_027A(A)]
  623.   NEWTEX[53,"{"+ Extension_8_0EB8(Length(A),6)]
  624.   NEWTEX[54,"{"+Mid$(B$,54)]
  625.   If Extension_8_098C(Mid$(B$,11,2)) and 1
  626.     NEWTEX[56,"@ Perm"]
  627.   Else 
  628.     NEWTEX[56,"@ Temp"]
  629.   End If 
  630.   If Extension_8_098C(Mid$(B$,11,2)) and 2
  631.     NEWTEX[55,"@ Chip"]
  632.   Else 
  633.     NEWTEX[55,"@ Fast"]
  634.   End If 
  635. Return 
  636. UPDATBANKS:
  637.   SEL=-1 : OFFSET=0
  638. UPDATONLY:
  639.   NUMBANKS=0 : OLDOFF=-99
  640.   TCH=0 : TFA=0
  641.   For A=1 To 999
  642.     LE=Length(A)
  643.     If LE
  644.       ST=Start(A)
  645.       FLAG=Deek(ST-12)
  646.       If FLAG and 1 : TYPE$="Perm" : Else TYPE$="Temp" : End If 
  647.       If FLAG and 2
  648.         MEM$="Chip"
  649.         Add TCH,LE
  650.       Else 
  651.         MEM$="Fast"
  652.         Add TFA,LE
  653.       End If 
  654.       If FLAG and 4
  655.         I$="Sprites"
  656.       End If 
  657.       If FLAG and 8
  658.         I$="Icons"
  659.       End If 
  660.       If(FLAG and 12)=0
  661.         Gosub BANKTYPE
  662.       End If 
  663.       T$="{"+ Extension_8_0EB8(A,3)+"   "+ Extension_8_027A(A)+"   "+ Extension_8_0EB8(LE,6)+"   "+MEM$+"   "+TYPE$+"   "+I$
  664.       BNK$(NUMBANKS)= Extension_8_08C4(A)+ Extension_8_08D2(ST)+ Extension_8_08D2(LE)+ Extension_8_08C4(FLAG)+T$
  665.       Inc NUMBANKS
  666.     End If 
  667.   Next 
  668.   If SEL=-1
  669.     DEAGAD[28]
  670.     DEAGAD[29]
  671.     For A=31 To 46
  672.       DEAGAD[A]
  673.     Next 
  674.     For A=55 To 63
  675.       DEAGAD[A]
  676.     Next 
  677.   End If 
  678.   Gosub UPDATLIST
  679.   If SEL>-1 Then Gosub UPDATSTATE
  680.   ST["{ChipMem used:"+ Extension_8_0EC8(TCH,7)+" Bytes, FastMem used:"+ Extension_8_0EC8(TFA,7)+" Bytes."+Str$(NUMBANKS)+" Banks."]
  681. Return 
  682. UPDATLIST:
  683.   If NUMBANKS=0
  684.     FILBOX[4,65,615,213,0]
  685.     DRASLIDER[50,0,18,1,49]
  686.     Return 
  687.   End If 
  688.   D=OFFSET-OLDOFF
  689.   If D=0 Then Return 
  690.   If FB(49,4) and 1 Then DRASLIDER[50,OFFSET,18,NUMBANKS,49]
  691.   If Abs(D)>10
  692.     FILBOX[4,65,615,213,0]
  693.     For A=0 To Min(17,NUMBANKS-1)
  694.       Gosub LISBANK
  695.     Next 
  696.     OLDOFF=OFFSET
  697.     Return 
  698.   End If 
  699.   If D>0
  700.     Screen Copy 0,6,68+D*8,613,212 To 0,6,68
  701.     For A=18-D To 17
  702.       Gosub LISBANK
  703.     Next 
  704.   Else 
  705.     Screen Copy 0,6,68,613,212+D*8 To 0,6,68-D*8
  706.     For A=0 To -D-1
  707.       Gosub LISBANK
  708.     Next 
  709.   End If 
  710.   OLDOFF=OFFSET
  711. Return 
  712. LISBANK:
  713.   If A+OFFSET=SEL
  714.     TEX2[9,A*8+67,610,A*8+75,Mid$(BNK$(A+OFFSET),13)]
  715.   Else 
  716.     TEX[9,A*8+67,610,A*8+75,Mid$(BNK$(A+OFFSET),13)]
  717.   End If 
  718. Return 
  719. BANKTYPE:
  720.   I$=""
  721.   ID=Leek(ST) : BN$= Extension_8_027A(ST)
  722.   If ID=$12031990
  723.     I$="Packed Screen"+Str$(Deek(ST+4))+"*"+Mid$(Str$(Deek(ST+6)),2)
  724.     I$=I$+"*"+Mid$(Str$(Deek(ST+22)),2)
  725.   End If 
  726.   If ID=$6071963 Then I$="Packed Bitmap"
  727.   If BN$="Music   " Then I$="AMOS Music"
  728.   If BN$="Amal    " Then I$="AMOS Amal Program"
  729.   If BN$="Menu    " Then I$="AMOS Menu Definition"
  730.   If BN$="Samples "
  731.     I$="Samps "
  732.     For AAA=0 To Min(Deek(ST),2)
  733.       AAB=ST+Leek(ST+2+AAA*4)
  734.       I$=I$+"'"+(Peek$(AAB,8,Chr$(0))-" ")+"' "
  735.     Next 
  736.   End If 
  737.   If BN$="Resource" Then I$="AMOS Resource Bank"
  738.   If BN$="Asm     " Then I$="Machine Code"
  739.   If BN$="Tracker " Then I$="Noisetracker "+Peek$(ST,30,Chr$(0))
  740.   If BN$="Data    " or BN$="Datas   " Then I$="AMOS Data Bank"
  741.   If BN$="Work    " Then I$="AMOS Work Bank"
  742.   If ID= Extension_8_0998("PP20") Then I$="PowerPacked ->"+Str$( Extension_8_093A(Leek(ST+LE-4),8))+" Bytes"
  743.   If ID= Extension_8_0998("IMP!") Then I$="FileImploded ->"+Str$(Leek(ST+4))+" Bytes"
  744.   If ID= Extension_8_0998("RNC"+Chr$(1)) Then I$="RobNorthenCrunched"
  745.   If ID= Extension_8_0998("FORM")
  746.     ID2=Leek(ST+8)
  747.     If ID2= Extension_8_0998("ILBM")
  748.       I$="IFF-Picture"
  749.     Else 
  750.       If ID2= Extension_8_0998("ANIM")
  751.         I$="IFF-Animation"
  752.       Else 
  753.         If ID2= Extension_8_0998("8SVX")
  754.           I$="IFF-Sound"
  755.         Else 
  756.           I$="IFF"+ Extension_8_08D2(ID2)
  757.         End If 
  758.       End If 
  759.     End If 
  760.   End If 
  761.   If ID= Extension_8_0998("FONT") Then I$="AMCAF BankFont "+Peek$(ST+Leek(ST+4)+76,40,Chr$(0))
  762.   If Leek(ST+1080)= Extension_8_0998("M.K.")
  763.     I$="Protracker "+Peek$(ST,30,Chr$(0))
  764.   End If 
  765.   If Leek(ST+1080)=$4DE11DE3
  766.     I$="Delta Protracker"
  767.   End If 
  768.   If I$<>"" Then Return 
  769.   For AAA=0 To 15
  770.     P=Peek(ST+AAA)
  771.     Exit If P<32 and Not(P=9 or P=10 or P=13)
  772.   Next 
  773.   If AAA=16
  774.     I$="Ascii Text '"+Peek$(ST,16,Chr$(10))+"'..."
  775.   Else 
  776.     I$="Bin '"
  777.     For AAA=0 To 2
  778.       I$=I$+Mid$(Hex$(Leek(ST+AAA*4),8),2)
  779.       If AAA<2 : I$=I$+" " : End If 
  780.     Next 
  781.     I$=I$+"'"
  782.   End If 
  783. Return 
  784. LOAFILE:
  785.   FILEREQ[-1,640,160,0,"Load a file.",OLDFILE$,OLDDIR$,"","Load","Cancel","","RP"]
  786.   F$=Param$
  787.   If F$="" Then Return 
  788.   If Exist(F$)=0
  789.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  790.     Return 
  791.   End If 
  792.   OLDFILE$= Extension_8_02F0(F$)
  793.   OLDDIR$= Extension_8_03E0(F$)
  794.   Open In 1,F$
  795.   ID$=Input$(1,12) : ID= Extension_8_0998(ID$)
  796.   Close 1
  797.   Gosub FILEIDCHECK
  798.   If ERR=0
  799.     MOBNK=0
  800.     REQUEST["File loaded.","Ok"]
  801.   Else 
  802.     If ERR=-2
  803.       REQUEST["Loading aborted.","Ok"]
  804.     Else 
  805.       REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  806.     End If 
  807.   End If 
  808.   Trap Kill "T:Temp"
  809.   Gosub UPDATBANKS
  810. Return 
  811. FILEIDCHECK:
  812.   ERR=0
  813.   If ID= Extension_8_0998("IMP!")
  814.     REQUEST["This file is file imploded. Decrunch or load?","Decrunch|Load"]
  815.     If Param=0
  816.       If NUMBANKS
  817.         BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  818.       Else 
  819.         BANK=10
  820.       End If 
  821.       Gosub SELBANK
  822.       ST["Loading and decrunching file..."]
  823.       Trap Extension_8_0EA2 F$,BANK : ERR=Errtrap
  824.       ST["Done..."]
  825.     Else 
  826.       If NUMBANKS
  827.         BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  828.       Else 
  829.         BANK=10
  830.       End If 
  831.       Gosub SELBANK
  832.       ST["Loading imploded file..."]
  833.       Trap Extension_8_0464 F$,BANK : ERR=Errtrap
  834.       ST["Done..."]
  835.     End If 
  836.     Return 
  837.   End If 
  838.   If ID= Extension_8_0998("PP20")
  839.     REQUEST["This file is powerpacked. Decrunch or load?","Decrunch|Load"]
  840.     If Param=0
  841.       If NUMBANKS
  842.         BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  843.       Else 
  844.         BANK=10
  845.       End If 
  846.       Gosub SELBANK
  847.       ST["Loading and decrunching file..."]
  848.       Trap Extension_8_04E4 F$,BANK : ERR=Errtrap
  849.       ST["Done..."]
  850.     Else 
  851.       If NUMBANKS
  852.         BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  853.       Else 
  854.         BANK=10
  855.       End If 
  856.       Gosub SELBANK
  857.       ST["Loading powerpacked file..."]
  858.       Trap Extension_8_0464 F$,BANK : ERR=Errtrap
  859.       ST["Done..."]
  860.     End If 
  861.     Return 
  862.   End If 
  863.   If Right$(ID$,4)="ILBM"
  864.     REQUEST["This is an IFF-Picture. Do you want me to convert it into an Packed Picture?","Convert|Leave"]
  865.     If Param=0
  866.       Load Iff F$,1
  867.       Spack 1 To 1000
  868.       Screen Close 1
  869.       F$="T:Temp"
  870.       Save "T:Temp",1000
  871.       If NUMBANKS
  872.         BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  873.       Else 
  874.         BANK=10
  875.       End If 
  876.       ID= Extension_8_0998("AmBk") : ID$="AmBk"+ Extension_8_08C4(BANK)
  877.       Erase 1000
  878.       Gosub BANKIDCHECK
  879.       Kill F$
  880.       Return 
  881.     End If 
  882.   End If 
  883.   REQUEST["The file will be loaded as permanent fastmem bank.","Continue|Abort"]
  884.   If Param=1 Then ERR=-2 : Return 
  885.   If NUMBANKS>0
  886.     BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  887.   Else 
  888.     BANK=10
  889.   End If 
  890.   Gosub SELBANK
  891.   Trap Extension_8_0464 F$,BANK
  892.   ERR=Errtrap
  893. Return 
  894. SAVFILE:
  895.   REQUEST["Do you want to save the current bank as binary or as AMOS bank?","Binary|AMOS Bank"]
  896.   TYP=Param
  897.   If TYP
  898.     FILEREQ[-1,640,160,0,"Save a bank.",OLDFILE$,OLDDIR$,"*.abk","Save","Cancel","","RPS"]
  899.   Else 
  900.     FILEREQ[-1,640,160,0,"Save a file.",OLDFILE$,OLDDIR$,"","Save","Cancel","","RPS"]
  901.   End If 
  902.   F$=Param$
  903.   If F$="" Then Return 
  904.   If Exist(F$)
  905.     REQUEST["File already exists!","Overwrite|Backup|Cancel"]
  906.     If Param=2 : Return : End If 
  907.     If Param=1
  908.       Trap Kill F$+".bak"
  909.       Trap Rename F$ To F$+".bak"
  910.     End If 
  911.   End If 
  912.   OLDFILE$= Extension_8_02F0(F$)
  913.   OLDDIR$= Extension_8_03E0(F$)
  914.   If TYP
  915.     Trap Save F$, Extension_8_098C(BNK$(SEL))
  916.   Else 
  917.     Trap Extension_8_0472 F$, Extension_8_098C(BNK$(SEL))
  918.   End If 
  919.   If Errtrap=0
  920.     REQUEST["Bank saved.","Ok"]
  921.     MOBNK=0
  922.   Else 
  923.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  924.   End If 
  925.   FILEREQNOTIFY
  926. Return 
  927. CLRBANK:
  928.   REQUEST["Are you sure, that you want to erase this bank?","Proceed|Cancel"]
  929.   If Param=1 Then Return 
  930.   Erase Extension_8_098C(BNK$(SEL))
  931.   Gosub UPDATBANKS
  932.   MOBNK=1
  933. Return 
  934. KILFILE:
  935.   FILEREQ[-1,640,160,0,"Delete a file.",OLDFILE$,OLDDIR$,"","Delete","Cancel","","RPS"]
  936.   F$=Param$
  937.   If F$="" Then Return 
  938.   If Exist(F$)=0
  939.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  940.     Return 
  941.   End If 
  942.   REQUEST["Really delete this file?","Proceed|Cancel"]
  943.   If Param=1 Then Return 
  944.   Trap Kill F$
  945.   If Errtrap
  946.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  947.   Else 
  948.     REQUEST["File deleted.","Ok"]
  949.   End If 
  950. Return 
  951. PPPACK:
  952.   REQUEST["Effeciency?","Medorice|Good|Very Good|Best"]
  953.   EFF=Param+1
  954.   ST["Please wait..."]
  955.   A= Extension_8_098C(BNK$(SEL))
  956.   Trap Extension_8_04B4 "T:Temp",A
  957.   ST["Done..."]
  958.   If Errtrap
  959.     Trap Kill "T:Temp"
  960.     REQUEST["Error during crunching!","Cancel"]
  961.     Return 
  962.   End If 
  963.    Extension_8_0672 "T:Temp"
  964.   OL=Length(A) : NL= Extension_8_06A2 
  965.   BODY$="New size:"+Str$(NL)+". Gain"+Str$(OL-NL)+" Bytes (="+Mid$(Str$(100-((NL*100)/OL)),2)+"%)"
  966.   REQUEST[BODY$,"Ok"]
  967.   REQUEST["Overwrite current bank or load into new bank?","Overwrite|New Bank|Cancel"]
  968.   If Param=2 Then Kill "T:Temp" : Return 
  969.   O$= Extension_8_027A(A)
  970.   If Param=0
  971.      Extension_8_0464 "T:Temp",A
  972.      Extension_8_028C A,"PP"+O$
  973.   Else 
  974.     BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  975.     Gosub SELBANK
  976.      Extension_8_0464 "T:Temp",BANK
  977.      Extension_8_028C BANK,"PP"+O$
  978.   End If 
  979.   Kill "T:Temp"
  980.   Gosub UPDATONLY
  981.   MOBNK=1
  982. Return 
  983. FIMPPACK:
  984.    Extension_8_0472 "T:Temp", Extension_8_098C(BNK$(SEL))
  985.   Amos To Back 
  986.   Exec "Fimp >CON:////FileImploder/CLOSE T:Temp T:Temp -V"
  987.   Amos To Front 
  988.    Extension_8_0672 "T:Temp"
  989.   OL=Length(A) : NL= Extension_8_06A2 
  990.   If OL=NL or NL=0
  991.     REQUEST["File could not be crunched.","Cancel"]
  992.     Trap Kill "T:Temp"
  993.     Return 
  994.   End If 
  995.   BODY$="New size:"+Str$(NL)+". Gain"+Str$(OL-NL)+" Bytes (="+Mid$(Str$(100-((NL*100)/OL)),2)+"%)"
  996.   REQUEST[BODY$,"Ok"]
  997.   REQUEST["Overwrite current bank or load into new bank?","Overwrite|New Bank|Cancel"]
  998.   If Param=2 Then Kill "T:Temp" : Return 
  999.   O$= Extension_8_027A(A)
  1000.   If Param=0
  1001.      Extension_8_0464 "T:Temp",A
  1002.      Extension_8_028C A,"FImp"+O$
  1003.   Else 
  1004.     BANK= Extension_8_098C(BNK$(NUMBANKS-1))+1
  1005.     Gosub SELBANK
  1006.      Extension_8_0464 "T:Temp",BANK
  1007.      Extension_8_028C BANK,"FImp"+O$
  1008.   End If 
  1009.   Kill "T:Temp"
  1010.   Gosub UPDATONLY
  1011.   MOBNK=1
  1012. Return 
  1013. BANKDELTAENCOD:
  1014.   A= Extension_8_098C(BNK$(SEL))
  1015.    Extension_8_0FCE A
  1016.    Extension_8_028C A,"D-"+ Extension_8_027A(A)
  1017.   Gosub UPDATONLY
  1018.   MOBNK=1
  1019. Return 
  1020. BANKDELTADECOD:
  1021.   A= Extension_8_098C(BNK$(SEL))
  1022.    Extension_8_0FF2 A
  1023.    Extension_8_028C A,(Left$( Extension_8_027A(A),2)-"D-")+Mid$( Extension_8_027A(A),3)
  1024.   Gosub UPDATONLY
  1025.   MOBNK=1
  1026. Return 
  1027. SAVALLBANKS:
  1028.   FILEREQ[-1,640,160,0,"Save all banks.",OLDFILE$,OLDDIR$,"#?.abk","Save","Cancel","","RPS"]
  1029.   F$=Param$
  1030.   If F$="" Then Return 
  1031.   If Exist(F$)
  1032.     REQUEST["File already exists!","Overwrite|Backup|Cancel"]
  1033.     If Param=2 : Return : End If 
  1034.     If Param=1
  1035.       Trap Kill F$+".bak"
  1036.       Trap Rename F$ To F$+".bak"
  1037.     End If 
  1038.   End If 
  1039.   OLDFILE$= Extension_8_02F0(F$)
  1040.   OLDDIR$= Extension_8_03E0(F$)
  1041.   Trap Save F$
  1042.   If Errtrap=0
  1043.     REQUEST["Banks saved.","Ok"]
  1044.     MOBNK=0
  1045.   Else 
  1046.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  1047.   End If 
  1048.   Gosub UPDATBANKS
  1049.   FILEREQNOTIFY
  1050. Return 
  1051. LOAALLBANKS:
  1052.   If MOBNK
  1053.     REQUEST["Banks not saved, do you want to save them?","Save|Abandon"]
  1054.     If Param=0
  1055.       Gosub SAVALLBANKS
  1056.     End If 
  1057.   End If 
  1058.   FILEREQ[-1,640,160,0,"Load AMOS banks.",OLDFILE$,OLDDIR$,"#?.abk","Load","Cancel","","PR"]
  1059.   F$=Param$
  1060.   If F$="" Then Return 
  1061.   If Exist(F$)=0
  1062.     REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  1063.     Return 
  1064.   End If 
  1065.   OLDFILE$= Extension_8_02F0(F$)
  1066.   OLDDIR$= Extension_8_03E0(F$)
  1067.   Open In 1,F$
  1068.   ID$=Input$(1,12) : ID= Extension_8_0998(ID$)
  1069.   Close 1
  1070.   Gosub BANKIDCHECK
  1071.   If ERR=0
  1072.     MOBNK=0
  1073.     REQUEST["Banks loaded.","Ok"]
  1074.   Else 
  1075.     If ERR=-2
  1076.       REQUEST["Loading aborted.","Ok"]
  1077.     Else 
  1078.       If ERR=-1
  1079.         REQUEST["File format unknown!","Cancel"]
  1080.       Else 
  1081.         REQUEST[ Extension_8_0522( Extension_8_0532 ),"Cancel"]
  1082.       End If 
  1083.     End If 
  1084.   End If 
  1085.   Trap Kill "T:Temp"
  1086.   Gosub UPDATBANKS
  1087. Return 
  1088. CLRALLBANKS:
  1089.   If MOBNK
  1090.     REQUEST["Banks not saved, do you want to save them?","Save|Abandon"]
  1091.     If Param=0
  1092.       Gosub SAVALLBANKS
  1093.     End If 
  1094.   End If 
  1095.   Erase All 
  1096.   Gosub UPDATBANKS
  1097. Return 
  1098. BANKIDCHECK:
  1099.   ERR=0
  1100.   If ID= Extension_8_0998("AmBs")
  1101.     REQUEST["This file contains multiple banks and will erase any existent ones.","Proceed|Cancel"]
  1102.     If Param=0
  1103.       ST["Loading multiple banks..."]
  1104.       Trap Load F$ : ERR=Errtrap
  1105.       ST["Done..."]
  1106.     Else 
  1107.       ERR=-2
  1108.     End If 
  1109.     Return 
  1110.   End If 
  1111.   If ID= Extension_8_0998("PPbk")
  1112.     REQUEST["This is a powerpacked bank. Load anyway?","Load|Cancel"]
  1113.     If Param=0
  1114.       BANK= Extension_8_098C(Mid$(ID$,5,2))
  1115.       Gosub SELBANK
  1116.       ST["Loading powerpacked bank..."]
  1117.       Trap Extension_5_0120 F$,BANK : ERR=Errtrap
  1118.       ST["Done..."]
  1119.     Else 
  1120.       ERR=-2
  1121.     End If 
  1122.     Return 
  1123.   End If 
  1124.   If ID= Extension_8_0998("AmBk")
  1125.     ST["Loading single bank..."]
  1126.     BANK= Extension_8_098C(Mid$(ID$,5,2))
  1127.     Gosub SELBANK
  1128.     Trap Load F$,BANK
  1129.     ST["Done..."]
  1130.     Return 
  1131.   End If 
  1132.   If ID= Extension_8_0998("IMP!")
  1133.     REQUEST["This file is file imploded. Decrunch and check?","Decrunch|Cancel"]
  1134.     If Param=0
  1135.       ST["Loading imploded file..."]
  1136.       Trap Extension_8_0EA2 F$,1000 : ERR=Errtrap
  1137.       ST["Done..."]
  1138.       If ERR
  1139.         Erase 1000 : Return 
  1140.       End If 
  1141.       F$="T:Temp"
  1142.        Extension_8_0472 F$,Start(1000)
  1143.       ID=Leek(Start(1000)) : ID$=Peek$(Start(1000),12)
  1144.       Erase 1000
  1145.       Gosub BANKIDCHECK
  1146.     Else 
  1147.       ERR=-2
  1148.     End If 
  1149.     Return 
  1150.   End If 
  1151.   If ID= Extension_8_0998("PP20")
  1152.     REQUEST["This file is powerpacked. Decrunch and check?","Decrunch|Cancel"]
  1153.     If Param=0
  1154.       ST["Loading powerpacked file..."]
  1155.       Trap Extension_8_04E4 F$,1000 : ERR=Errtrap
  1156.       ST["Done..."]
  1157.       If ERR
  1158.         Erase 1000 : Return 
  1159.       End If 
  1160.       F$="T:Temp"
  1161.        Extension_8_0472 F$,Start(1000)
  1162.       ID=Leek(Start(1000)) : ID$=Peek$(Start(1000),12)
  1163.       Erase 1000
  1164.       Gosub BANKIDCHECK
  1165.       Kill F$
  1166.     Else 
  1167.       ERR=-2
  1168.     End If 
  1169.     Return 
  1170.   End If 
  1171.   ERR=-1
  1172. Return 
  1173. SELBANK:
  1174.   If Length(BANK)
  1175.     REQUEST["This file would normally go into bank no."+Str$(BANK)+", erasing the current one. Select other bank?","Overwrite|Select"]
  1176.   Else 
  1177.     REQUEST["This file would normally go into bank no."+Str$(BANK)+". Select other bank?","No|Yes"]
  1178.   End If 
  1179.   If Param
  1180.     NUMENT["Enter the new bank number:","Ok",BANK,0,999]
  1181.     BANK=Val(Mid$(Param$,2))
  1182.   End If 
  1183. Return 
  1184. INIT:
  1185.   Screen Open 0,640,256,4,$8000
  1186.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  1187.   Palette 0,$FFF,$AAA,$666
  1188.   Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  1189.   Screen Display 0,128,40,320,256
  1190.   Gr Writing 0
  1191.   Multi Wait : Limit Mouse 
  1192.   DEFCLOWIN[20,0,0]
  1193.   FILBOX[0,11,639,255,0]
  1194.   DEFTEX[21,19,0,616,10,"{AMCAF Bank Manager V1.0",1]
  1195.   DEFSCRTBK[22,617,0]
  1196.   DEFTEX[23,4,13,100,24,"Load banks",1]
  1197.   DEFTEX[24,4,26,100,37,"Save banks",1]
  1198.   DEFTEX[25,4,39,100,50,"Clear all",1]
  1199.   DEFTEX[26,4,52,100,63,"Quit out!",1]
  1200.   DEFTEX[27,103,13,200,24,"Load file",1]
  1201.   DEFTEX[28,103,26,200,37,"Save file",1]
  1202.   DEFTEX[29,103,39,200,50,"Clear bank",1]
  1203.   DEFTEX[30,103,52,200,63,"Kill file",1]
  1204.   DEFTEX[31,203,13,350,24,"PowerPack bank",1]
  1205.   DEFTEX[32,203,26,350,37,"FileImplode bank",1]
  1206.   DEFTEX[33,203,39,350,50,"Delta encode bank",1]
  1207.   DEFTEX[34,203,52,350,63,"Delta decode bank",1]
  1208.   DEFTEX[35,353,13,450,24,"Rename Bank",1]
  1209.   DEFTEX[36,353,26,450,37,"Banklength",1]
  1210.   DEFTEX[37,353,39,450,50,"Chip<->Fast",1]
  1211.   DEFTEX[38,353,52,450,63,"Temp<->Perm",1]
  1212.   DEFTEX[39,453,13,544,24,"Add Encode",1]
  1213.   DEFTEX[40,453,26,544,37,"Xor Encode",1]
  1214.   DEFTEX[41,453,39,544,50,"Mix Encode",1]
  1215.   DEFTEX[42,453,52,544,63,"Rol Encode",1]
  1216.   DEFTEX[43,547,13,635,24,"Add Decode",1]
  1217.   DEFTEX[44,547,26,635,37,"Xor Decode",1]
  1218.   DEFTEX[45,547,39,635,50,"Mix Decode",1]
  1219.   DEFTEX[46,547,52,635,63,"Rol Decode",1]
  1220.   DEFBOX[64,4,65,615,213,3]
  1221.   DEFARROWU[47,618,213-17]
  1222.   DEFARROWD[48,618,213-8]
  1223.   DEFBOX[50,618,65,635,213-18,3]
  1224.   DRASLIDER[50,0,18,1,49]
  1225.   DRABOX[4,215,635,241,1]
  1226.   ST["Welcome to AMCAF Bank Manager V1.0"]
  1227.   DEFTEX[51,8,217,50,227,"{",4]
  1228.   DEFTEX[52,53,217,140,227,"{",4]
  1229.   DEFTEX[53,143,217,210,227,"{",4]
  1230.   DEFTEX[54,333,217,631,227,"{",4]
  1231.   DEFTEX[55,213,217,270,227,"@ Fast",1]
  1232.   DEFTEX[56,273,217,330,227,"@ Temp",1]
  1233.   DEFTEX[57,8,229,100,239,"Swap Bank",1]
  1234.   DEFTEX[58,102,229,200,239,"Delete Bank",1]
  1235.   DEFTEX[59,202,229,300,239,"Duplicate",1]
  1236.   DEFTEX[60,302,229,400,239,"Unpack Bank",1]
  1237.   DEFTEX[61,402,229,480,239,"View Asc",1]
  1238.   DEFTEX[62,482,229,560,239,"View Hex",1]
  1239.   DEFTEX[63,562,229,631,239,"Custom",1]
  1240. Return 
  1241. End Proc
  1242. Procedure ST[T$]
  1243.   TEXBOX[4,243,635,253,1,T$]
  1244. End Proc
  1245. Procedure FILEREQNOTIFY
  1246.   Shared FIL$()
  1247.   FIL$(0)=""
  1248. End Proc
  1249. Procedure FILEREQ[SN,SX,SY,YP,T$,F$,D$,PAT$,OK$,FAIL$,FON$,OP$]
  1250.   Shared FIL$(),MXFILES
  1251.   OTH=TH
  1252.   Gosub INIT
  1253.   Gosub SETUPSCREEN
  1254.   Gosub REFRESH
  1255.   Multi Wait : Limit Mouse 
  1256.   OMK=0 : EXA=0 : ENT=0
  1257.   Do 
  1258.     If Timer>25 and RDIR=1
  1259.       Sort FIL$(0)
  1260.       Gosub REFRESH
  1261.       Timer=0
  1262.     End If 
  1263.     Repeat 
  1264.       If RDIR Then Gosub EXAMINDIR Else Multi Wait 
  1265.     Until Amos Here
  1266.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  1267.     If MK=2 Then Gosub DEVLIST
  1268.     If I$<>"" and ENT>0
  1269.       STRGAD[ENT,I$]
  1270.       If Param=-1
  1271.         If ENT=6
  1272.           F$=Mid$(FB$(6),2) : BT=4
  1273.           FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
  1274.           Exit 
  1275.         End If 
  1276.         If ENT=7
  1277.           DD$=D$
  1278.           D$=Mid$(FB$(7),2)
  1279.           If Exist(D$)
  1280.             Gosub NEWREAD
  1281.           Else 
  1282.             REQUEST["Directory "+D$+" not found!","Oh sorry!"]
  1283.             D$=DD$
  1284.             NEWTEX[7,"{"+D$]
  1285.           End If 
  1286.         End If 
  1287.         If ENT=8
  1288.           PAT$=Mid$(FB$(8),2)
  1289.           Gosub NEWREAD
  1290.         End If 
  1291.         ENT=0
  1292.       End If 
  1293.     End If 
  1294.     BT=0
  1295.     If MK=1 and OMK<>1
  1296.       CHKMOUSE[XM,YM,1,15]
  1297.       BT=Param
  1298.     End If 
  1299.     If BT and ENT Then NEWTEX[ENT,FB$(ENT)] : ENT=0
  1300.     If BT=1 Then Gosub DRAGSCREEN
  1301.     If BT=11 Then Gosub SELECT
  1302.     If BT=2 or BT=4 or BT=5
  1303.       If RDIR
  1304.         FIL$(0)=""
  1305.       Else 
  1306.         FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
  1307.       End If 
  1308.       Exit 
  1309.     End If 
  1310.     If BT=3 Then Amos To Back 
  1311.     If BT>5 and BT<9 Then ENT=BT : STRGAD[BT,""]
  1312.     If BT=9 Then Gosub DEVLIST
  1313.     If BT=10 Then Gosub PARDIR
  1314.     If BT=12 Then Gosub DRAGSLIDER
  1315.     If BT=13 Then Gosub ARROWUP
  1316.     If BT=14 Then Gosub ARROWDOWN
  1317.     If BT=15 Then Gosub FLIPPAGE
  1318.     OMK=MK
  1319.   Loop 
  1320.   Screen Close SN
  1321.   For A=1 To 15
  1322.     DISGAD[A]
  1323.   Next 
  1324.   If BT=4 Then A$= Extension_8_03EC(D$)+F$ Else A$=""
  1325.   TH=OTH
  1326.   Trap Limit Mouse 
  1327. Pop Proc[A$]
  1328. INIT:
  1329.   If SN<0
  1330.     For A=0 To 7
  1331.       Trap Screen A
  1332.       If Errtrap : SN=A : Exit : End If 
  1333.     Next 
  1334.   End If 
  1335.   If T$="" Then T$="AMCAF File Selector"
  1336.   If D$="" Then D$= Extension_8_03E0(Dir$)
  1337.   If Instr(OP$,"P") Then PAT=1 Else PAT=0
  1338.   If Instr(OP$,"R") Then FIL$(0)=""
  1339.   If Instr(OP$,"D") Then DIONLY=1 Else DIONLY=0
  1340.   If Instr(OP$,"Q") Then QUICK=1 Else QUICK=0
  1341.   If Instr(OP$,"S") Then SAVREQ=1 Else SAVREQ=0
  1342.   KICK=Deek(Leek(4)+20)
  1343.   If KICK<37 Then PAT=0
  1344.   SX=Max(Min((SX+15) and $FFE0,640),160)
  1345.   SY=Max(Min(SY,256),96)
  1346.   If YP<40 Then YP=168-SY/2
  1347.   If FIL$(0)<>""
  1348.     RDIR$=Mid$(FIL$(0),5)
  1349.     If D$<>RDIR$
  1350.       FIL$(0)=""
  1351.       RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
  1352.       Return 
  1353.     End If 
  1354.     For A=1 To MXFILES
  1355.       Exit If FIL$(A)=Chr$(255)
  1356.     Next 
  1357.     NUMFIL=A-1 : FILOFF= Extension_8_098C(FIL$(0))
  1358.     MXNAMLEN= Extension_8_098C(Mid$(FIL$(0),3))
  1359.     RDIR=0
  1360.   Else 
  1361.     RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
  1362.   End If 
  1363. Return 
  1364. SETUPSCREEN:
  1365.   Screen Open SN,SX,SY,4,$8000
  1366.   Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1367.   Palette 0,$FFF,$AAA,$666
  1368.   Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  1369.   Screen Display SN,288-SX/4,YP,SX,SY
  1370.   If FON$<>""
  1371.     A=Val(Left$(FON$,2))
  1372.     If A>0
  1373.       Trap Extension_8_05B0 Mid$(FON$,3),A
  1374.       If Errtrap=0
  1375.         TH=A
  1376.       End If 
  1377.     End If 
  1378.   End If 
  1379.   Gr Writing 0
  1380.   DEFCLOWIN[2,0,0]
  1381.   FILBOX[0,TH+3,SX-1,SY-1,0]
  1382.   DEFTEX[1,19,0,SX-24,TH+2,"{"+T$,3]
  1383.   DEFSCRTBK[3,SX-23,0]
  1384.   A=Text Length("Pattern:")+8
  1385.   If DIONLY=0
  1386.     DEFTEX[6,A,SY-TH*2-9,SX-5,SY-TH-7,"{"+F$,7]
  1387.     TEX[4,FB(6,1),FB(6,0),FB(6,3),"}File:"]
  1388.     FY2=SY-TH*3-13
  1389.   Else 
  1390.     FY2=SY-TH*2-9
  1391.   End If 
  1392.   DEFTEX[7,A,FY2,SX-5,FY2+TH+2,"{"+D$,7]
  1393.   TEX[4,FB(7,1),FB(7,0),FB(7,3),"}Dir:"]
  1394.   If PAT
  1395.     DEFTEX[8,A,FY2-TH-4,SX-5,FY2-2,"{"+PAT$,7]
  1396.     TEX[4,FB(8,1),FB(8,0),FB(8,3),"}Pattern:"]
  1397.     FY2=FB(8,1)-2
  1398.   Else 
  1399.     FY2=FB(7,1)-2
  1400.   End If 
  1401.   DEFTEX[4,4,SY-TH-5,SX/4-2,SY-3,OK$,1]
  1402.   DEFTEX[9,SX/4+1,SY-TH-5,SX/2-3,SY-3,"Devices",1]
  1403.   DEFTEX[10,SX/2,SY-TH-5,SX/2+SX/4-4,SY-3,"Parent",1]
  1404.   If Right$(D$,1)=":" Then DEAGAD[10]
  1405.   DEFTEX[5,SX/2+SX/4-1,SY-TH-5,SX-5,SY-3,FAIL$,1]
  1406.   DEFARROWU[13,SX-22,FY2-17]
  1407.   DEFARROWD[14,SX-22,FY2-8]
  1408.   D=(FY2-TH-9)
  1409.   MXLIN=D/TH
  1410.   FY1=TH+7+(D-TH*MXLIN)/2
  1411.   DEFBOX[15,SX-22,TH+5,SX-5,FY2-18,3]
  1412.   DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
  1413. Return 
  1414. PARDIR:
  1415.   If Right$(D$,1)=":" Then Return 
  1416.   If RDIR Then Extension_8_0660 
  1417.   D$= Extension_8_03E0(D$)
  1418.   Gosub NEWREAD
  1419. Return 
  1420. NEWREAD:
  1421.   If RDIR Then Extension_8_0660 
  1422.   NEWTEX[7,"{"+D$]
  1423.   EXA=0 : RDIR=1 : Gosub EXAMINDIR
  1424.   If Right$(D$,1)=":" Then DEAGAD[10] Else ACTGAD[10]
  1425.   ACTGAD[9]
  1426. Return 
  1427. DEVLIST:
  1428.   If RDIR=1 or Right$(FIL$(NUMFIL),1)=":" Then Return 
  1429.   FILOFF=NUMFIL
  1430.   F$=Dev First$("")
  1431.   While NUMFIL<MXFILES and(F$<>"")
  1432.     F$=Mid$(F$,2,Instr(F$,":")-1)
  1433.     TYP= Extension_8_02D0(F$)
  1434.     If TYP=0
  1435.       MXNAMLEN=Max(MXNAMLEN,Len(F$))
  1436.       Request Off 
  1437.       Trap Extension_8_0672 F$
  1438.       A=Errtrap
  1439.       Request On 
  1440.       If A=0
  1441.         NAM$= Extension_8_06D8 
  1442.         SOR$="A"+Upper$(F$)+Chr$(0)+"  <Dev> "+F$+Chr$(0)+" ("+NAM$+") "
  1443.       Else 
  1444.         SOR$="A"+Upper$(F$)+Chr$(0)+"  <Dev> "+F$+Chr$(0)+" "+ Extension_8_0522( Extension_8_0532 )
  1445.       End If 
  1446.       Inc NUMFIL
  1447.       FIL$(NUMFIL)=SOR$
  1448.     End If 
  1449.     If TYP=1
  1450.       MXNAMLEN=Max(MXNAMLEN,Len(F$))
  1451.       Inc NUMFIL
  1452.       FIL$(NUMFIL)="B"+Upper$(F$)+Chr$(0)+"  <Dir> "+F$+Chr$(0)+" Assign"
  1453.     End If 
  1454.     F$=Dev Next$
  1455.   Wend 
  1456.   Sort FIL$(0)
  1457.   FILOFF=Min(FILOFF,NUMFIL-MXLIN)
  1458.   Gosub REFRESH
  1459.   DEAGAD[9]
  1460. Return 
  1461. SELECT:
  1462.   Y=YM-FY1
  1463.   If Y<0 or Y>=FY1+MXLIN*TH Then Return 
  1464.   F=Y/TH+FILOFF+1
  1465.   If F>NUMFIL Then Return 
  1466.   TYP=Asc(FIL$(F))
  1467.   A$=Peek$(Varptr(FIL$(F))+Instr(FIL$(F),Chr$(0))+8,40,Chr$(0))
  1468.   If TYP=32
  1469.     D$= Extension_8_03EC(D$)+A$
  1470.     Gosub NEWREAD
  1471.   End If 
  1472.   If TYP=45
  1473.     F$=A$
  1474.     NEWTEX[6,"{"+F$]
  1475.     If SELFIL<>F
  1476.       If SELFIL-FILOFF=>0 and SELFIL-FILOFF<=MXLIN
  1477.         A=SELFIL-FILOFF-1 : SELFIL=-1
  1478.         Gosub LISTFILE
  1479.       End If 
  1480.       SELFIL=F : A=SELFIL-FILOFF-1 : Timer=0
  1481.       Gosub LISTFILE
  1482.     Else 
  1483.       If Timer<50 and SAVREQ=0
  1484.         BT=4
  1485.       End If 
  1486.     End If 
  1487.   End If 
  1488.   If TYP=65 or TYP=66
  1489.     D$=A$ : Gosub NEWREAD
  1490.   End If 
  1491. Return 
  1492. DRAGSCREEN:
  1493.   PUSHGAD[BT]
  1494.   A=YM
  1495.   Limit Mouse X Hard(0),40+A To X Hard(SX-1),296-SY+A
  1496.   Repeat 
  1497.     If RDIR : Gosub EXAMINDIR : Else Multi Wait : End If 
  1498.     YM=Y Screen(Y Mouse)-A : MK=Mouse Key : I$=Inkey$
  1499.     Add YP,YM
  1500.     Screen Display SN,,YP,,
  1501.   Until MK<>1
  1502.   Multi Wait : Limit Mouse 
  1503.   OMK=1
  1504.   RELEGAD[BT]
  1505. Return 
  1506. ARROWUP:
  1507.   PUSHGAD[BT]
  1508.   Repeat 
  1509.     Multi Wait 
  1510.     MK=Mouse Key : I$=Inkey$
  1511.     If FILOFF>0
  1512.       Dec FILOFF
  1513.       Gosub SCROLFILES
  1514.     End If 
  1515.   Until MK<>1
  1516.   RELEGAD[BT]
  1517. Return 
  1518. ARROWDOWN:
  1519.   PUSHGAD[BT]
  1520.   Repeat 
  1521.     Multi Wait 
  1522.     MK=Mouse Key : I$=Inkey$
  1523.     If FILOFF<NUMFIL-MXLIN
  1524.       Inc FILOFF
  1525.       Gosub SCROLFILES
  1526.     End If 
  1527.   Until MK<>1
  1528.   RELEGAD[BT]
  1529. Return 
  1530. DRAGSLIDER:
  1531.   DISGAD[12]
  1532.   O=YM-FB(12,1)
  1533.   Repeat 
  1534.     Multi Wait 
  1535.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  1536.     DRAGSLIDER[15,YM-O,MXLIN,NUMFIL,12]
  1537.     If NUMFIL>MXLIN
  1538.       FILOFF=Param
  1539.       Gosub SCROLFILES
  1540.     End If 
  1541.   Until MK<>1
  1542.   ENAGAD[12]
  1543.   DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
  1544.   OMK=1
  1545. Return 
  1546. REFRESH:
  1547.   DEFBOX[11,4,TH+5,SX-25,FY2,7]
  1548.   If NUMFIL>0
  1549.     For A=0 To Min(MXLIN-1,NUMFIL-1)
  1550.       Gosub LISTFILE
  1551.     Next 
  1552.     OLDOFF=FILOFF
  1553.   End If 
  1554.   If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
  1555. Return 
  1556. SCROLFILES:
  1557.   If OLDOFF=FILOFF Then Return 
  1558.   X1=FB(11,0)+2 : X2=FB(11,2)-2 : Y1=FY1+1 : Y2=FY1+TH*MXLIN+1
  1559.   D=FILOFF-OLDOFF
  1560.   If Abs(D)>MXLIN-2 Then Gosub REFRESH : Return 
  1561.   If D>0
  1562.     Screen Copy SN,X1,Y1+D*TH,X2,Y2 To SN,X1,Y1
  1563.     For A=MXLIN-D To MXLIN-1
  1564.       Gosub LISTFILE
  1565.     Next 
  1566.   Else 
  1567.     Screen Copy SN,X1,Y1,X2,Y2+D*TH To SN,X1,Y1-D*TH
  1568.     For A=0 To -D-1
  1569.       Gosub LISTFILE
  1570.     Next 
  1571.   End If 
  1572.   OLDOFF=FILOFF
  1573.   If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
  1574. Return 
  1575. FLIPPAGE:
  1576.   If NUMFIL<MXLIN Then Return 
  1577.   If YM>(FB(12,1)+FB(12,3))/2
  1578.     FILOFF=Min(FILOFF+MXLIN,NUMFIL-MXLIN)
  1579.   Else 
  1580.     FILOFF=Max(FILOFF-MXLIN,0)
  1581.   End If 
  1582.   Gosub REFRESH
  1583.   DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
  1584. Return 
  1585. LISTFILE:
  1586.   If QUICK
  1587.     A$=FIL$(A+FILOFF+1)
  1588.     A$=Peek$(Varptr(A$)+Instr(A$,Chr$(0)),40,Chr$(0))
  1589.   Else 
  1590.     A$=FIL$(A+FILOFF+1)
  1591.     B$=Mid$(A$,Instr(A$,Chr$(0))+1)
  1592.     FIL$=Left$(B$,Instr(B$,Chr$(0))-1)
  1593.     RES$=Mid$(B$,Len(FIL$)+2)
  1594.     A$=FIL$+Space$(MXNAMLEN-(Len(FIL$)-8))+RES$
  1595.   End If 
  1596.   If Asc(FIL$(A+FILOFF+1))<>45
  1597.     TEX2[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
  1598.   Else 
  1599.     TEX[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
  1600.   End If 
  1601.   If A+FILOFF+1=SELFIL
  1602.     Gr Writing 2
  1603.     Ink 2 : Bar 8,FY1+A*TH+1 To SX-29,FY1+(A+1)*TH
  1604.     Gr Writing 0
  1605.   End If 
  1606. Return 
  1607. EXAMINDIR:
  1608.   If EXA=0
  1609.     FILOFF=0 : NUMFIL=0 : MXNAMLEN=5 : RDIR$=D$
  1610.     SELFIL=-1
  1611.     For A=1 To MXFILES
  1612.       FIL$(A)=Chr$(255)
  1613.     Next 
  1614.     Trap Extension_8_063A D$
  1615.     If Errtrap=0
  1616.       EXA=1 : Timer=0
  1617.     Else 
  1618.       Gosub REFRESH
  1619.       REQUEST[ Extension_8_0522( Extension_8_0532 )+"!","Cancel"]
  1620.       RDIR=0 : Return 
  1621.     End If 
  1622.   End If 
  1623.   If NUMFIL=MXFILES
  1624.      Extension_8_0660 
  1625.     Sort FIL$(0)
  1626.     RDIR=0
  1627.     Gosub REFRESH
  1628.     Return 
  1629.   End If 
  1630.   FIL$= Extension_8_064C 
  1631.   If FIL$=""
  1632.     Sort FIL$(0)
  1633.     Timer=0 : RDIR=0 : Gosub REFRESH
  1634.     Return 
  1635.   End If 
  1636.   TYP= Extension_8_0688 
  1637.   If QUICK=0
  1638.     DATE$=Mid$( Extension_8_0F0A( Extension_8_06F4 ),4)+" "+ Extension_8_0F1A( Extension_8_070E )
  1639.     COM$= Extension_8_0762 
  1640.     FLAG$= Extension_8_0728( Extension_8_0742 )
  1641.   End If 
  1642.   If TYP<0
  1643.     If DIONLY=0
  1644.       If KICK>36
  1645.         A= Extension_8_0300(FIL$,PAT$)
  1646.       Else 
  1647.         A=-1
  1648.       End If 
  1649.     Else 
  1650.       A=0
  1651.     End If 
  1652.     If A
  1653.       MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
  1654.       SIZE$= Extension_8_0EC8( Extension_8_06A2 ,7)
  1655.       Inc NUMFIL
  1656.       If QUICK
  1657.         FIL$(NUMFIL)="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)
  1658.       Else 
  1659.         SOR$="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
  1660.         FIL$(NUMFIL)=SOR$
  1661.       End If 
  1662.     End If 
  1663.   Else 
  1664.     MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
  1665.     Inc NUMFIL
  1666.     If QUICK
  1667.       FIL$(NUMFIL)=" "+Upper$(FIL$)+Chr$(0)+"  <Dir> "+FIL$+Chr$(0)
  1668.     Else 
  1669.       SOR$=" "+Upper$(FIL$)+Chr$(0)+"  <Dir> "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
  1670.       FIL$(NUMFIL)=SOR$
  1671.     End If 
  1672.   End If 
  1673. Return 
  1674. End Proc
  1675. Procedure REQUEST[T$,OP$]
  1676.   Dim LIN$(10)
  1677.   OPT=1 : OTH=TH
  1678.   For A=1 To Len(OP$)
  1679.     If Mid$(OP$,A,1)="|" Then Inc OPT
  1680.   Next 
  1681.   If Screen=-1
  1682.     TH=8
  1683.     SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
  1684.     LPR=SX/8-2
  1685.   Else 
  1686.     SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
  1687.     LPR=SX/Text Length("M")-2
  1688.   End If 
  1689.   LI=0 : LP=1 : LILE=0
  1690.   For A=1 To Len(T$)
  1691.     P=Asc(Mid$(T$,A,1))
  1692.     Inc LILE
  1693.     If LILE>LPR
  1694.       LIN$(LI)=Mid$(T$,LP,SP-LP+1)
  1695.       LP=SP+2 : LILE=A-LP
  1696.       Inc LI
  1697.     End If 
  1698.     If P=32 Then SP=A-1
  1699.     If P=167 Then LILE=LPR+2 : SP=A-1
  1700.   Next 
  1701.   LIN$(LI)=Mid$(T$,LP) : Inc LI
  1702.   NBLI=LI-1
  1703.   SY=32+LI*TH
  1704.   If Screen=-1
  1705.     SN=0
  1706.     Screen Open SN,SX,SY,4,$8000
  1707.     Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1708.     Palette 0,$FFF,$AAA,$666
  1709.     Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  1710.     Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1711.     Gr Writing 0
  1712.     Wait Vbl : Limit Mouse 
  1713.     OLDSCR=-1
  1714.     XP=0 : YP=0
  1715.   Else 
  1716.     If Screen Height<SY or Screen Width<SX or Screen Colour<4
  1717.       For A=0 To 7
  1718.         Trap Screen A
  1719.         If Errtrap : SN=A : Exit : End If 
  1720.       Next 
  1721.       OLDSCR=Screen
  1722.       Screen Open SN,SX,SY,4,$8000
  1723.       Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1724.       Get Palette OLDSCR
  1725.       Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1726.       Gr Writing 0
  1727.       Wait Vbl : Limit Mouse 
  1728.       XP=0 : YP=0
  1729.     Else 
  1730.       XP=(Screen Width-SX)/2
  1731.       YP=(Screen Height-SY)/2
  1732.       SN=-1
  1733.       Get Cblock 9,XP-4,YP-2,SX+16,SY+4
  1734.       DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
  1735.       DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
  1736.       Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
  1737.     End If 
  1738.   End If 
  1739.   FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
  1740.   For A=0 To NBLI
  1741.     TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
  1742.   Next 
  1743.   OP=0
  1744.   For A=1 To OPT
  1745.     NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
  1746.     T$=Mid$(OP$,OP+1,NP-OP-1)
  1747.     X1=XP+4+((A-1)*(SX-6))/OPT
  1748.     X2=XP+1+(A*(SX-6))/OPT
  1749.     DEFTEX[15+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
  1750.     OP=NP
  1751.   Next 
  1752.   OMK=0
  1753.   Do 
  1754.     Repeat : Multi Wait : Until Amos Here
  1755.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  1756.     BT=0
  1757.     If MK=1 and OMK<>1
  1758.       CHKMOUSE[XM,YM,16,15+OPT]
  1759.       BT=Param
  1760.     End If 
  1761.     Exit If BT
  1762.     OMK=MK
  1763.   Loop 
  1764.   For A=1 To OPT
  1765.     DISGAD[15+A]
  1766.   Next 
  1767.   Limit Mouse 
  1768.   If SN>-1
  1769.     Screen Close SN
  1770.     If OLDSCR>-1
  1771.       Screen OLDSCR
  1772.     End If 
  1773.   Else 
  1774.     Put Cblock 9
  1775.     Del Cblock 9
  1776.   End If 
  1777.   TH=OTH
  1778. End Proc[BT-16]
  1779. Procedure NUMENT[T$,OP$,DEFNUM,LOWER,UPPER]
  1780.   Dim LIN$(10)
  1781.   OPT=1 : OTH=TH
  1782.   For A=1 To Len(OP$)
  1783.     If Mid$(OP$,A,1)="|" Then Inc OPT
  1784.   Next 
  1785.   If Screen=-1
  1786.     TH=8
  1787.     SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
  1788.     LPR=SX/8-2
  1789.   Else 
  1790.     SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
  1791.     LPR=SX/Text Length("M")-2
  1792.   End If 
  1793.   LI=0 : LP=1 : LILE=0
  1794.   For A=1 To Len(T$)
  1795.     P=Asc(Mid$(T$,A,1))
  1796.     Inc LILE
  1797.     If LILE>LPR
  1798.       LIN$(LI)=Mid$(T$,LP,SP-LP+1)
  1799.       LP=SP+2 : LILE=A-LP
  1800.       Inc LI
  1801.     End If 
  1802.     If P=32 Then SP=A-1
  1803.     If P=167 Then LILE=LPR+2 : SP=A-1
  1804.   Next 
  1805.   LIN$(LI)=Mid$(T$,LP) : Inc LI
  1806.   NBLI=LI-1
  1807.   SY=48+LI*TH
  1808.   If Screen=-1
  1809.     SN=0
  1810.     Screen Open SN,SX,SY,4,$8000
  1811.     Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1812.     Palette 0,$FFF,$AAA,$666
  1813.     Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  1814.     Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1815.     Gr Writing 0
  1816.     Wait Vbl : Limit Mouse 
  1817.     OLDSCR=-1
  1818.     XP=0 : YP=0
  1819.   Else 
  1820.     If Screen Height<SY or Screen Width<SX or Screen Colour<4
  1821.       For A=0 To 7
  1822.         Trap Screen A
  1823.         If Errtrap : SN=A : Exit : End If 
  1824.       Next 
  1825.       OLDSCR=Screen
  1826.       Screen Open SN,SX,SY,4,$8000
  1827.       Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1828.       Get Palette OLDSCR
  1829.       Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1830.       Gr Writing 0
  1831.       Wait Vbl : Limit Mouse 
  1832.       XP=0 : YP=0
  1833.     Else 
  1834.       XP=(Screen Width-SX)/2
  1835.       YP=(Screen Height-SY)/2
  1836.       SN=-1
  1837.       Get Cblock 9,XP-4,YP-2,SX+16,SY+4
  1838.       DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
  1839.       DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
  1840.       Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
  1841.     End If 
  1842.   End If 
  1843.   FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
  1844.   For A=0 To NBLI
  1845.     TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
  1846.   Next 
  1847.   DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+Mid$(Str$(DEFNUM),2),7]
  1848.   OP=0
  1849.   For A=1 To OPT
  1850.     NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
  1851.     T$=Mid$(OP$,OP+1,NP-OP-1)
  1852.     X1=XP+4+((A-1)*(SX-6))/OPT
  1853.     X2=XP+1+(A*(SX-6))/OPT
  1854.     DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
  1855.     OP=NP
  1856.   Next 
  1857.   OMK=0
  1858.   STRGAD[16,""]
  1859.   Do 
  1860.     Repeat : Multi Wait : Until Amos Here
  1861.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  1862.     BT=17
  1863.     If I$<>""
  1864.       If I$<" " or(I$>="0" and I$<="9")
  1865.         If Not(I$="0" and NUM=0)
  1866.           STRGAD[16,I$]
  1867.           Exit If Param=-1
  1868.         End If 
  1869.       End If 
  1870.     End If 
  1871.     NUM=Val(Mid$(FB$(16),2))
  1872.     If NUM<LOWER
  1873.       NUM=LOWER
  1874.       NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
  1875.       STRGAD[16,""]
  1876.     End If 
  1877.     If NUM>UPPER
  1878.       NUM=UPPER
  1879.       NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
  1880.       STRGAD[16,""]
  1881.     End If 
  1882.     BT=0
  1883.     If MK=1 and OMK<>1
  1884.       CHKMOUSE[XM,YM,16,16+OPT]
  1885.       BT=Param
  1886.     End If 
  1887.     Exit If BT>16
  1888.     OMK=MK
  1889.   Loop 
  1890.   For A=1 To OPT+1
  1891.     DISGAD[15+A]
  1892.   Next 
  1893.   Limit Mouse 
  1894.   If SN>-1
  1895.     Screen Close SN
  1896.     If OLDSCR>-1
  1897.       Screen OLDSCR
  1898.     End If 
  1899.   Else 
  1900.     Put Cblock 9
  1901.     Del Cblock 9
  1902.   End If 
  1903.   TH=OTH
  1904.   A$= Extension_8_0EB8(BT-17,1)+Mid$(Str$(NUM),2)
  1905. End Proc[A$]
  1906. Procedure TXTENT[T$,OP$,DEFTXT$,NUMLET]
  1907.   Dim LIN$(10)
  1908.   OPT=1 : OTH=TH
  1909.   For A=1 To Len(OP$)
  1910.     If Mid$(OP$,A,1)="|" Then Inc OPT
  1911.   Next 
  1912.   If Screen=-1
  1913.     TH=8
  1914.     SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
  1915.     LPR=SX/8-2
  1916.   Else 
  1917.     SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
  1918.     LPR=SX/Text Length("M")-2
  1919.   End If 
  1920.   LI=0 : LP=1 : LILE=0
  1921.   For A=1 To Len(T$)
  1922.     P=Asc(Mid$(T$,A,1))
  1923.     Inc LILE
  1924.     If LILE>LPR
  1925.       LIN$(LI)=Mid$(T$,LP,SP-LP+1)
  1926.       LP=SP+2 : LILE=A-LP
  1927.       Inc LI
  1928.     End If 
  1929.     If P=32 Then SP=A-1
  1930.     If P=167 Then LILE=LPR+2 : SP=A-1
  1931.   Next 
  1932.   LIN$(LI)=Mid$(T$,LP) : Inc LI
  1933.   NBLI=LI-1
  1934.   SY=48+LI*TH
  1935.   If Screen=-1
  1936.     SN=0
  1937.     Screen Open SN,SX,SY,4,$8000
  1938.     Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1939.     Palette 0,$FFF,$AAA,$666
  1940.     Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
  1941.     Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1942.     Gr Writing 0
  1943.     Wait Vbl : Limit Mouse 
  1944.     OLDSCR=-1
  1945.     XP=0 : YP=0
  1946.   Else 
  1947.     If Screen Height<SY or Screen Width<SX or Screen Colour<4
  1948.       For A=0 To 7
  1949.         Trap Screen A
  1950.         If Errtrap : SN=A : Exit : End If 
  1951.       Next 
  1952.       OLDSCR=Screen
  1953.       Screen Open SN,SX,SY,4,$8000
  1954.       Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
  1955.       Get Palette OLDSCR
  1956.       Screen Display SN,288-SX/4,168-SY/2,SX,SY
  1957.       Gr Writing 0
  1958.       Wait Vbl : Limit Mouse 
  1959.       XP=0 : YP=0
  1960.     Else 
  1961.       XP=(Screen Width-SX)/2
  1962.       YP=(Screen Height-SY)/2
  1963.       SN=-1
  1964.       Get Cblock 9,XP-4,YP-2,SX+16,SY+4
  1965.       DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
  1966.       DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
  1967.       Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
  1968.     End If 
  1969.   End If 
  1970.   FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
  1971.   For A=0 To NBLI
  1972.     TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
  1973.   Next 
  1974.   DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+DEFTXT$,7]
  1975.   OP=0
  1976.   For A=1 To OPT
  1977.     NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
  1978.     T$=Mid$(OP$,OP+1,NP-OP-1)
  1979.     X1=XP+4+((A-1)*(SX-6))/OPT
  1980.     X2=XP+1+(A*(SX-6))/OPT
  1981.     DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
  1982.     OP=NP
  1983.   Next 
  1984.   OMK=0
  1985.   STRGAD[16,""]
  1986.   Do 
  1987.     Repeat : Multi Wait : Until Amos Here
  1988.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  1989.     BT=17
  1990.     If I$<>""
  1991.       STRGAD[16,I$]
  1992.       Exit If Param=-1
  1993.     End If 
  1994.     TXT$=Mid$(FB$(16),2)
  1995.     If Len(TXT$)>NUMLET
  1996.       NEWTEX[16,"{"+Left$(TXT$,NUMLET)]
  1997.       STRGAD[16,""]
  1998.     End If 
  1999.     BT=0
  2000.     If MK=1 and OMK<>1
  2001.       CHKMOUSE[XM,YM,16,16+OPT]
  2002.       BT=Param
  2003.     End If 
  2004.     Exit If BT>16
  2005.     OMK=MK
  2006.   Loop 
  2007.   For A=1 To OPT+1
  2008.     DISGAD[15+A]
  2009.   Next 
  2010.   Limit Mouse 
  2011.   If SN>-1
  2012.     Screen Close SN
  2013.     If OLDSCR>-1
  2014.       Screen OLDSCR
  2015.     End If 
  2016.   Else 
  2017.     Put Cblock 9
  2018.     Del Cblock 9
  2019.   End If 
  2020.   TH=OTH
  2021.   A$= Extension_8_0EB8(BT-17,1)+TXT$
  2022. End Proc[A$]
  2023. Procedure CHKMOUSE[XM,YM,LL,UL]
  2024.   For BT=LL To UL
  2025.     If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) and(FB(BT,4) and 1) Then Exit 
  2026.   Next 
  2027.   If BT>UL Then Pop Proc[0]
  2028.   If FB(BT,4) and 2 Then Pop Proc[BT]
  2029.   OST=-1 : AA=0
  2030.   ST= Extension_8_093A(FB(BT,4) and 4,2)
  2031.   Repeat 
  2032.     Multi Wait 
  2033.     XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
  2034.     If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) Then A=1 Else A=0
  2035.     If AA<>A Then AA=A : ST=1-ST
  2036.     If OST<>ST
  2037.       If ST
  2038.         PUSHGAD[BT]
  2039.       Else 
  2040.         RELEGAD[BT]
  2041.       End If 
  2042.       OST=ST
  2043.     End If 
  2044.   Until MK<>1
  2045.   If A=0 Then Pop Proc[0]
  2046.   If ST
  2047.     RELEGAD[BT]
  2048.   Else 
  2049.     PUSHGAD[BT]
  2050.   End If 
  2051. End Proc[BT]
  2052. Procedure DEFTEX[BT,X1,Y1,X2,Y2,T$,FL]
  2053.   TEXBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2),T$]
  2054.   DEFGAD[BT,X1,Y1,X2,Y2,FL]
  2055.   FB$(BT)=T$
  2056. End Proc
  2057. Procedure DEFBOX[BT,X1,Y1,X2,Y2,FL]
  2058.   FILBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2)]
  2059.   DEFGAD[BT,X1,Y1,X2,Y2,FL]
  2060. End Proc
  2061. Procedure DEFGAD[BT,X1,Y1,X2,Y2,FL]
  2062.   FB(BT,0)=X1 : FB(BT,1)=Y1
  2063.   FB(BT,2)=X2 : FB(BT,3)=Y2
  2064.   FB(BT,4)=FL
  2065.   FB$(BT)=""
  2066. End Proc
  2067. Procedure DEAGAD[BT]
  2068.   If(FB(BT,4) and 1)=0 Then Pop Proc
  2069.   FB(BT,4)=FB(BT,4) and $FE
  2070.   Set Pattern 2
  2071.   Ink 3 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
  2072.   Set Pattern 0
  2073. End Proc
  2074. Procedure ACTGAD[BT]
  2075.   If FB(BT,4) and 1 Then Pop Proc
  2076.   CLRGAD[BT]
  2077.   FB(BT,4)=FB(BT,4) or 1
  2078.   If FB$(BT)<>""
  2079.     TEXBOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2),FB$(BT)]
  2080.   Else 
  2081.     DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2)]
  2082.   End If 
  2083. End Proc
  2084. Procedure DISGAD[BT]
  2085.   FB(BT,4)=FB(BT,4) and $FE
  2086. End Proc
  2087. Procedure ENAGAD[BT]
  2088.   FB(BT,4)=FB(BT,4) or 1
  2089. End Proc
  2090. Procedure CLRGAD[BT]
  2091.   FB(BT,4)=FB(BT,4) and $FE
  2092.   Ink 2 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
  2093. End Proc
  2094. Procedure PUSHGAD[BT]
  2095.   DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),1]
  2096. End Proc
  2097. Procedure RELEGAD[BT]
  2098.   DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),0]
  2099. End Proc
  2100. Procedure FILBOX[X1,Y1,X2,Y2,SE]
  2101.   Ink 2 : Bar X1+2,Y1+1 To X2-2,Y2-1
  2102.    Extension_8_0388 X1,Y2,2
  2103.    Extension_8_0388 X2,Y1,2
  2104.   Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
  2105.   Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
  2106. End Proc
  2107. Procedure NEWTEX[BT,T$]
  2108.   FB$(BT)=T$
  2109.   TEX[FB(BT,0)+1,FB(BT,1),FB(BT,2)-1,FB(BT,3),T$]
  2110. End Proc
  2111. Procedure TEXBOX[X1,Y1,X2,Y2,SE,T$]
  2112.   TEX[X1+1,Y1,X2-1,Y2,T$]
  2113.    Extension_8_0388 X1,Y2,2 : Extension_8_0388 X2,Y1,2
  2114.   Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
  2115.   Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
  2116. End Proc
  2117. Procedure TEX[X1,Y1,X2,Y2,T$]
  2118.   If Asc(T$)=123
  2119.     M=1 : T$=Mid$(T$,2)
  2120.   Else 
  2121.     If Asc(T$)=125
  2122.       M=2 : T$=Mid$(T$,2)
  2123.     Else 
  2124.       M=0
  2125.     End If 
  2126.   End If 
  2127.   TL=Text Length(T$)
  2128.   While TL>(X2-X1)-4
  2129.     T$=Left$(T$,Len(T$)-1)
  2130.     TL=Text Length(T$)
  2131.   Wend 
  2132.   If M=1
  2133.     X=X1+4 : Y=Y1+1
  2134.   Else 
  2135.     If M=2
  2136.       X=X2-Text Length(T$)-2 : Y=Y1+1
  2137.     Else 
  2138.       X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
  2139.     End If 
  2140.   End If 
  2141.   If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
  2142.   Ink 0 : Text X,Y+Text Base,T$
  2143. End Proc
  2144. Procedure TEX2[X1,Y1,X2,Y2,T$]
  2145.   If Asc(T$)=123
  2146.     M=1 : T$=Mid$(T$,2)
  2147.   Else 
  2148.     If Asc(T$)=125
  2149.       M=2 : T$=Mid$(T$,2)
  2150.     Else 
  2151.       M=0
  2152.     End If 
  2153.   End If 
  2154.   TL=Text Length(T$)
  2155.   While TL>(X2-X1)-4
  2156.     T$=Left$(T$,Len(T$)-1)
  2157.     TL=Text Length(T$)
  2158.   Wend 
  2159.   If M=1
  2160.     X=X1+4 : Y=Y1+1
  2161.   Else 
  2162.     If M=2
  2163.       X=X2-Text Length(T$)-2 : Y=Y1+1
  2164.     Else 
  2165.       X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
  2166.     End If 
  2167.   End If 
  2168.   If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
  2169.   Ink 1 : Text X,Y+Text Base,T$
  2170. End Proc
  2171. Procedure DRABOX[X1,Y1,X2,Y2,SE]
  2172.   Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
  2173.   Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
  2174. End Proc
  2175. Procedure STRGAD[BT,I$]
  2176.   Shared POS
  2177.   A$=FB$(BT)
  2178.   If I$=""
  2179.     POS=Len(A$)-1
  2180.   End If 
  2181.   If I$>Chr$(31) Then A$=Left$(A$,POS+1)+I$+Mid$(A$,POS+2) : Inc POS
  2182.   If I$=Chr$(8) and POS>0 Then A$=Left$(A$,POS)+Mid$(A$,POS+2) : Dec POS
  2183.   If I$=Cleft$ and POS>0 Then Dec POS
  2184.   If I$=Cright$ and POS<Len(A$)-1 Then Inc POS
  2185.   If I$=Chr$(13)
  2186.     NEWTEX[BT,A$]
  2187.     Pop Proc[-1]
  2188.   End If 
  2189.   NEWTEX[BT,A$]
  2190.   X1=FB(BT,0)+5+Text Length(Mid$(A$,2,POS)) : Y1=FB(BT,1)+1
  2191.   X2=X1+Max(Text Length(Mid$(A$,POS+2,1)),4)
  2192.   If X2<FB(BT,2)-4
  2193.     Gr Writing 2
  2194.     Ink 3 : Bar X1,Y1 To X2-1,Y1+TH-1
  2195.     Gr Writing 0
  2196.   End If 
  2197. End Proc[0]
  2198. Procedure DEFCLOWIN[BT,X,Y]
  2199.   DRACLOWIN[X,Y]
  2200.   DEFGAD[BT,X,Y,X+18,Y+TH+2,1]
  2201. End Proc
  2202. Procedure DRACLOWIN[X,Y]
  2203.   FILBOX[X,Y,X+18,Y+TH+2,0]
  2204.   Ink 0 : Box 7+X,3+Y To 11+X,Y+TH-1
  2205. End Proc
  2206. Procedure DEFSCRTBK[BT,X,Y]
  2207.   DRASCRTBK[X,Y]
  2208.   DEFGAD[BT,X,Y,X+22,Y+TH+2,1]
  2209. End Proc
  2210. Procedure DRASCRTBK[X,Y]
  2211.   FILBOX[X,Y,X+22,Y+TH+2,0]
  2212.   Ink 0 : Box 4+X,2+Y To 14+X,Y+TH/2+2
  2213.   Ink 2 : Bar 8+X,Y+TH/2 To 18+X,Y+TH
  2214.   Ink 0 : Box 8+X,Y+TH/2 To 18+X,Y+TH
  2215. End Proc
  2216. Procedure DEFARROWU[BT,X,Y]
  2217.   DRAARROWU[X,Y]
  2218.   DEFGAD[BT,X,Y,X+17,Y+8,3]
  2219. End Proc
  2220. Procedure DRAARROWU[X,Y]
  2221.   DRABOX[X,Y,X+17,Y+8,0]
  2222.    Extension_8_1016 X+4,Y+6 To X+8,Y+2,0
  2223.    Extension_8_1016 X+5,Y+6 To X+8,Y+3,0
  2224.    Extension_8_1016 X+9,Y+2 To X+13,Y+6,0
  2225.    Extension_8_1016 X+9,Y+3 To X+12,Y+6,0
  2226. End Proc
  2227. Procedure DEFARROWD[BT,X,Y]
  2228.   DRAARROWD[X,Y]
  2229.   DEFGAD[BT,X,Y,X+17,Y+8,3]
  2230. End Proc
  2231. Procedure DRAARROWD[X,Y]
  2232.   DRABOX[X,Y,X+17,Y+8,0]
  2233.    Extension_8_1016 X+4,Y+2 To X+8,Y+6,0
  2234.    Extension_8_1016 X+5,Y+2 To X+8,Y+5,0
  2235.    Extension_8_1016 X+9,Y+6 To X+13,Y+2,0
  2236.    Extension_8_1016 X+9,Y+5 To X+12,Y+2,0
  2237. End Proc
  2238. Procedure DRAPROCBAR[BT,POS,MX]
  2239.   X1=FB(BT,0)+2 : X2=FB(BT,2)-2 : Y1=FB(BT,1)+1 : Y2=FB(BT,3)-1
  2240.   DX=X2-X1
  2241.   PX=X1+(POS*DX)/MX
  2242.   If PX>X1 and PX<X2
  2243.     Ink 0 : Bar X1,Y1 To PX,Y2
  2244.     Ink 2 : Bar PX,Y1 To X2,Y2
  2245.   End If 
  2246.   If PX=X1 Then Ink 2 : Bar X1,Y1 To X2,Y2
  2247.   If PX=X2 Then Ink 0 : Bar X1,Y1 To X2,Y2
  2248. End Proc
  2249. Procedure DRASLIDER[BT,LINOFF,PAG,NUMLIN,NB]
  2250.   D=(FB(BT,3)-FB(BT,1))-4
  2251.   Y1=(LINOFF*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
  2252.   Y2=((LINOFF+PAG)*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
  2253.   DEFGAD[NB,FB(BT,0)+4,Y1,FB(BT,2)-4,Y2,3]
  2254.   Ink 2
  2255.   If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
  2256.   If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
  2257.   If Y2-Y1>0
  2258.     Ink 0 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
  2259.   Else 
  2260.      Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,0
  2261.   End If 
  2262. End Proc
  2263. Procedure DRAGSLIDER[BT,Y,PAG,NUMLIN,NB]
  2264.   Y1=FB(NB,1) : Y2=FB(NB,3) : D=Y2-Y1
  2265.   Y1=Min(Max(FB(BT,1)+2,Y),FB(BT,3)-2-D)
  2266.   Y2=Y1+D : FB(NB,1)=Y1 : FB(NB,3)=Y2
  2267.   Ink 2
  2268.   If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
  2269.   If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
  2270.   If Y2-Y1>0
  2271.     Ink 1 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
  2272.   Else 
  2273.      Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,1
  2274.   End If 
  2275.   D=FB(BT,3)-FB(BT,1)-4
  2276.   L=Min(((Y1-FB(BT,1)-2)*Max(NUMLIN,PAG)+D/2)/D,NUMLIN-PAG)
  2277. End Proc[L]